package com.renl.juc.queue;

import java.util.concurrent.BlockingQueue;
import java.util.concurrent.SynchronousQueue;

/**
 * @author renl
 * @date 2020/1/7
 */
public class SynchronousQueueDemo {
  public static void main(String[] args) {
    BlockingQueue<String> blockingQueue = new SynchronousQueue<>();
    new Thread(() -> {
      try {
        System.out.println(Thread.currentThread().getName() + "\t put 1");
        blockingQueue.put("1");
        System.out.println(Thread.currentThread().getName() + "\t put 2");
        blockingQueue.put("2");
        System.out.println(Thread.currentThread().getName() + "\t put 3");
        blockingQueue.put("3");
      } catch (InterruptedException e) {
        e.printStackTrace();
      }
    },"A").start();

    new Thread(() -> {
      try {
        System.out.println(Thread.currentThread().getName() + "\t take 1");
        blockingQueue.take();
        System.out.println(Thread.currentThread().getName() + "\t take 2");
        blockingQueue.take();
        System.out.println(Thread.currentThread().getName() + "\t take 3");
        blockingQueue.take();
      } catch (InterruptedException e) {
        e.printStackTrace();
      }
    },"B").start();
  }
}
